﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestorDeFlotasModelo.Entities;
using GestorDeFlotasModelo.Factorias;
using GestorDeFlotasDesktop.UILogic;
using GestorDeFlotasDesktop.UILogic.Helpers;

namespace GestorDeFlotasDesktop.AbmChofer
{
    public partial class frmListadoChofer : BaseForm
    {
        private bool EsEliminar;
        private bool EsSeleccionar;
        public Chofer ChoferElegido { get; set; }
        public event EventHandler ChoferSeleccionado;

        public frmListadoChofer(bool esEliminar, bool esSeleccionar)
        {
            EsEliminar = esEliminar;
            EsSeleccionar = esSeleccionar;
            InitializeComponent();
        }

        protected override void OnVisibleChanged(EventArgs e)
        {
            try
            {
                base.OnVisibleChanged(e);
                if (EsSeleccionar)
                {
                    butEliminar.Visible = false;
                    butModificar.Visible = false;
                    butSeleccionar.Visible = true;
                }
                else
                {
                    butEliminar.Visible = EsEliminar;
                    butModificar.Visible = !EsEliminar;
                    butSeleccionar.Visible = false;
                }

                CargarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void CargarTodos()
        {
            List<Chofer> choferes = Transaccion.Factoria<FactoriaChofer>().SelectTodos<Chofer>();
            SetGridData(choferes);
        }

        private void SetGridData(List<Chofer> choferes)
        {
            if (choferes != null && choferes.Count > 0)
            {
                choferes = choferes.OrderBy(x => x.Apellido).ToList();
                GridCreation(dgvChoferes);
                dgvChoferes.DataSource = choferes;
                dgvChoferes.Visible = true;
                lblNoItems.Visible = false;

                dgvChoferes.Columns["Id"].Visible = false;
                dgvChoferes.Columns["FechaNacimientoString"].HeaderText = "Fecha De Nacimiento";
                dgvChoferes.Columns["FechaNacimiento"].Visible = false;
            }
            else
            {
                lblNoItems.Visible = true;
                dgvChoferes.Visible = false;
            }
        }

        private void AbmChofer_Load(object sender, EventArgs e)
        {

        }

        private void butLimpiar_Click(object sender, EventArgs e)
        {
            try
            {
                txtApe.Text = string.Empty;
                txtNombre.Text = string.Empty;
                txtDni.Text = string.Empty;

                CargarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void butEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                Chofer choferSeleccionado;

                choferSeleccionado = (Chofer)dgvChoferes.SelectedRows[0].DataBoundItem;
                DialogResult dialogResult = MessageBox.Show("Esta seguro que desea eliminar el chofer seleccionado?", "Eliminar Chofer", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes)
                {
                    choferSeleccionado.Habilitado = false;
                    Transaccion.Persistir();
                    CargarConFiltros();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void butBuscar_Click(object sender, EventArgs e)
        {
            try
            {
                if (!string.IsNullOrEmpty(txtDni.Text) && !ValidatorHelper.isNumericIntFieldValid(txtDni.Text))
                    MessageBox.Show("El campo DNI debe ser numérico");
                else
                    CargarConFiltros();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public void CargarConFiltros()
        {
            List<Chofer> choferes= Transaccion.Factoria<FactoriaChofer>().SelectChoferesConFiltro(
               ValidatorHelper.getValue(txtNombre), ValidatorHelper.getValue(txtApe),
               ValidatorHelper.getValue(txtDni, -1));
            SetGridData(choferes);
        }

        private void butModificar_Click(object sender, EventArgs e)
        {
            try
            {
                Chofer choferSeleccionado;

                if (dgvChoferes.SelectedRows.Count > 0)
                {
                    choferSeleccionado = (Chofer)dgvChoferes.SelectedRows[0].DataBoundItem;
                    new frmFormChofer(choferSeleccionado, this).Show();
                }
                else
                    MessageBox.Show("Debe seleccionar un chofer para modificar");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        protected virtual void button1_Click(object sender, EventArgs e)
        {
            try
            {
                this.ChoferElegido = (Chofer)dgvChoferes.SelectedRows[0].DataBoundItem;
                ChoferSeleccionado(sender, e);
                this.Hide();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}
